#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cmath>

#ifdef ONLINE_JUDGE
class Timer {
	public:
		void comenzar() { }
		void terminar() { }
		long double getOperacionesLog() const { return 0; }
		unsigned long long int getTiempo() const { return 0; }
		unsigned long long int getCiclos() const { return 0; }
		void opSencilla( int, int ) { }
		void opComplicada( int, int ) { }
};
#else
#include "utils/timer.h"
#endif

using namespace std;

Timer t;

int raiz( int num ) {
	int i = 0; t.opSencilla( 0, 0 );
	
	while ( i*i <= num ) {
		t.opComplicada( i, i );
		t.opSencilla( i * i, num );
		i++; t.opSencilla( i - 1, 0 );
	}
	
	t.opSencilla( i, 1 );
	return i - 1;
}

// Aprovechamos que los números cuadrados
// son la sumatoria de los números impares.
/*
int raiz( int num ) {
	int res = 0, n = 0, i;
	
	t.opSencilla( 0, 1 ); i = 1;
	while ( res <= num ) {
		t.opSencilla( res, num );
		t.opSencilla( res, i ); t.opSencilla( res, res + i ); res = res + i;
		t.opSencilla( i, 2 ); t.opSencilla( i, i + 2 ); i = i + 2;
		t.opSencilla( 0, n ); n++;
	}
	t.opSencilla( res, num );
	t.opSencilla( n, 1 );
	return n - 1;
}*/

int numerosCuadrados( int a, int b ) {
	int inferior = raiz(a); t.opSencilla( 0, inferior );
	int superior = raiz(b); t.opSencilla( 0, superior );
	
	t.opComplicada( inferior, inferior );
	t.opSencilla( inferior * inferior, a );
	if ( inferior * inferior != a ) {
		inferior++; t.opSencilla( 0, inferior );
	}
	
	t.opSencilla( superior, inferior );
	t.opSencilla( superior - inferior, 1 );
	return superior - inferior + 1;
}

int main() {
#ifndef ONLINE_JUDGE
	ifstream entrada( "e3.txt" );
	if ( !entrada.is_open() ) {
		cerr << "Error al abrir la entrada." << endl;
		return -1;
	}

	ofstream salida( "s3.txt" );
	if ( !salida.is_open() ) {
		cerr << "Error al abrir la salida." << endl;
		return -1;
	}
	
	ofstream times( "t3-times.txt" );
	ofstream clocks( "t3-clocks.txt" );
	ofstream ops( "t3-ops.txt" );
#else
	istream &entrada = cin;
	ostream &salida = cout;
#endif

	while ( entrada.good() ) {
		int a, b;
		entrada >> a >> b;
		if ( a == 0 && b == 0 ) break;

		int res;
		t.comenzar();
		res = numerosCuadrados( a, b );
		t.terminar();
		
		salida << res << endl;
		
#ifndef ONLINE_JUDGE
		int n = static_cast<int>( ( log( a ) + log( b ) ) / log( 2 ) ) + 2;
		times << n << '\t' << t.getTiempo() << endl;
		clocks << n << '\t' << t.getCiclos() << endl;
		ops << n << '\t' << t.getOperacionesLog() << endl;
#endif
	}

	return 0;
}
